home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / progwin.zip / FREEMEM.ZIP / FREEMEM.C < prev    next >
C/C++ Source or Header  |  1991-10-10  |  4KB  |  116 lines

  1. /*-----------------------------------------
  2.     FREEMEM.C -- Free Memory Display Program
  3.          (c) Charles Petzold, 1990
  4. ------------------------------------------*/
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #define ID_TIMER 1
  8.  
  9. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
  10.  
  11. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  12.               LPSTR lpszCmdLine, int nCmdShow)
  13.        {
  14.        static char szAppName[] = "FreeMem";
  15.        HDC         hdc;
  16.        HWND        hwnd;
  17.  
  18.        MSG         msg;
  19.        TEXTMETRIC  tm;
  20.        WNDCLASS       wndclass;
  21.  
  22.        if (hPrevInstance)
  23.             return FALSE;
  24.  
  25.        wndclass.style        = CS_HREDRAW | CS_VREDRAW;
  26.        wndclass.lpfnWndProc  = WndProc;
  27.        wndclass.cbClsExtra     = 0;
  28.        wndclass.cbWndExtra     = 0;
  29.        wndclass.hInstance    = hInstance;
  30.        wndclass.hIcon        = NULL;
  31.        wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);
  32.        wndclass.hbrBackground= GetStockObject (WHITE_BRUSH);
  33.        wndclass.lpszMenuName = NULL;
  34.        wndclass.lpszClassName= szAppName;
  35.  
  36.        RegisterClass (&wndclass);
  37.  
  38.        hwnd = CreateWindow (szAppName, "Free Memory",
  39.                 WS_OVERLAPPEDWINDOW,
  40.                 CW_USEDEFAULT, CW_USEDEFAULT,
  41.                 CW_USEDEFAULT, CW_USEDEFAULT,
  42.                 NULL, NULL, hInstance, NULL);
  43.  
  44.        hdc = GetDC (hwnd);
  45.        GetTextMetrics (hdc, &tm);
  46.        ReleaseDC (hwnd, hdc);
  47.  
  48.        if(4 * tm.tmAveCharWidth > GetSystemMetrics (SM_CXICON) ||
  49.                 2 * tm.tmHeight > GetSystemMetrics (SM_CYICON))
  50.            {
  51.            MessageBox (hwnd, "Icon size too small for display!",
  52.                        szAppName, MB_ICONEXCLAMATION | MB_OK);
  53.                return FALSE;
  54.            }
  55.  
  56.        if (!SetTimer (hwnd, ID_TIMER, 1000, NULL))
  57.            {
  58.            MessageBox (hwnd, "Too many clocks or timers!",
  59.                        szAppName, MB_ICONEXCLAMATION | MB_OK);
  60.            return FALSE;
  61.            }
  62.  
  63.        ShowWindow (hwnd, SW_SHOWMINNOACTIVE);
  64.        UpdateWindow (hwnd);
  65.  
  66.        while (GetMessage (&msg, NULL, 0, 0))
  67.              {
  68.              TranslateMessage (&msg);
  69.              DispatchMessage (&msg);
  70.              }
  71.              return msg.wParam;
  72.              }
  73.  
  74.   long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
  75.        {
  76.        static DWORD   dwFreeMem, dwPrevMem;
  77.        static RECT    rect;
  78.        char           cBuffer[20];
  79.        HDC            hdc;
  80.        PAINTSTRUCT    ps;
  81.  
  82.        switch (message)
  83.             {
  84.             case WM_TIMER :
  85.                  dwFreeMem = GetFreeSpace (0);
  86.  
  87.                  if(dwFreeMem != dwPrevMem)
  88.                      InvalidateRect (hwnd, NULL, TRUE);
  89.  
  90.                  dwPrevMem = dwFreeMem;
  91.                  return 0;
  92.  
  93.             case WM_SIZE :
  94.                  GetClientRect (hwnd, &rect);
  95.                  return 0;
  96.  
  97.             case WM_PAINT :
  98.                  hdc = BeginPaint (hwnd,&ps);
  99.                  DrawText (hdc, cBuffer,
  100.                            sprintf (cBuffer, "%.2f megs",
  101.                                     dwFreeMem / 1024.0 / 1024.0),
  102.                            &rect, DT_WORDBREAK);
  103.                  EndPaint (hwnd, &ps);
  104.                  return 0;
  105.  
  106.             case WM_QUERYOPEN :
  107.                  return 0;
  108.  
  109.             case WM_DESTROY:
  110.                  KillTimer(hwnd, ID_TIMER);
  111.                  PostQuitMessage(0);
  112.                  return 0;
  113.             }
  114.        return DefWindowProc(hwnd,message,wParam,lParam);
  115.        }
  116.